home *** CD-ROM | disk | FTP | other *** search
- /****************************************************************************
- * NCSA HDF *
- * Software Development Group *
- * National Center for Supercomputing Applications *
- * University of Illinois at Urbana-Champaign *
- * 605 E. Springfield, Champaign IL 61820 *
- * *
- * For conditions of distribution and use, see the accompanying *
- * hdf/COPYING file. *
- * *
- ****************************************************************************/
-
- /* $Id: hchunks.h,v 1.16 1997/10/24 21:00:35 koziol Exp $ */
-
- /*-----------------------------------------------------------------------------
- * File: hchunks.h
- * Purpose: Header file for Chunked elements
- * Dependencies: tbbt.c mcache.c
- * Invokes: none
- * Contents: Structures & definitions for chunked elements
- * Structure definitions: DIM_DEF, HCHUNK_DEF
- * Constant definitions:
- * Author: -GeorgeV - 9/3/96
- *---------------------------------------------------------------------------*/
-
- /* avoid re-inclusion */
- #ifndef __HCHUNKS_H
- #define __HCHUNKS_H
-
- /* required includes */
- #include "hfile.h" /* special info stuff */
-
- #ifdef _HCHUNKS_MAIN_
- /* Private to 'hchunks.c' */
-
- #include "tbbt.h" /* TBBT stuff */
- #include "mcache.h" /* caching routines */
- #include "hcomp.h" /* For Compression */
-
- /* Define class, class version and name(partial) for chunk table i.e. Vdata */
- #if 0 /* moved definition of class of vdata to hlimits.h */
- #define _HDF_CHK_TBL_CLASS "_HDF_CHK_TBL_" /* 13 bytes */
- #define _HDF_CHK_TBL_CLASS_VER 0 /* zero version number for class */
- #endif /* moved definition of class of vdata to hlimits.h */
- #define _HDF_CHK_TBL_NAME "_HDF_CHK_TBL_" /* 13 bytes */
-
- /* Define field name for each chunk record i.e. Vdata record */
- #define _HDF_CHK_FIELD_1 "origin" /* 6 bytes */
- #define _HDF_CHK_FIELD_2 "chk_tag" /* 7 bytes */
- #define _HDF_CHK_FIELD_3 "chk_ref" /* 7 bytes */
- #define _HDF_CHK_FIELD_NAMES "origin,chk_tag,chk_ref" /* 22 bytes */
-
- /* Define version number for chunked header format */
- #define _HDF_CHK_HDR_VER 0 /* zero version for format header */
-
- #endif /* _HCHUNKS_MAIN_ */
-
- /* Public structures */
-
- /* Structure for each Data array dimension Defintion */
- typedef struct dim_def_struct {
- int32 dim_length; /* length of this dimension */
- int32 chunk_length; /* chunk length along this dimension */
- int32 distrib_type; /* Data distribution along this dimension */
- } DIM_DEF, * DIM_DEF_PTR;
-
- /* Structure for each Chunk Definition*/
- typedef struct hchunk_def_struct {
- int32 chunk_size; /* size of this chunk*/
- int32 nt_size; /* number type size i.e. size of data type */
- int32 num_dims; /* number of actual dimensions */
- DIM_DEF *pdims; /* ptr to array of dimension records for this chunk*/
- int32 chunk_flag; /* multiply specialness? SPECIAL_COMP */
-
- /* For Compression info */
- comp_coder_t comp_type; /* Compression type */
- comp_model_t model_type; /* Compression model type */
- comp_info *cinfo; /* Compression info struct */
- model_info *minfo; /* Compression model info struct */
- }HCHUNK_DEF, * HCHUNK_DEF_PTR;
-
- /* Private structues */
- #ifdef _HCHUNKS_MAIN_
- /* Private to 'hchunks.c' */
-
- /* Structure for each Data array dimension */
- typedef struct dim_rec_struct {
- /* fields stored in chunked header */
- int32 flag; /* distrib_type(low 8 bits 0-7)
- - Data distribution along this dimension
- other(medium low 8 bits 8-15)
- - regular/unlimited dimension? */
- int32 dim_length; /* length of this dimension */
- int32 chunk_length; /* chunk length along this dimension */
-
- /* info determined from 'flag' field */
- int32 distrib_type; /* Data distribution along this dimension */
- int32 unlimited; /* regular(0) or unlimited dimension(1) */
-
- /* computed fields */
- int32 last_chunk_length; /* last chunk length along this dimension */
- int32 num_chunks; /* i.e. "dim_length / chunk_length" */
- } DIM_REC, * DIM_REC_PTR;
-
- /* Structure for each Chunk */
- typedef struct chunk_rec_struct {
- int32 chunk_number; /* chunk number from coordinates i.e. origin */
- int32 chk_vnum; /* chunk vdata record number i.e. position in table*/
-
- /* chunk record fields stored in Vdata Table */
- int32 *origin; /* origin -> position of chunk */
- uint16 chk_tag; /* DFTAG_CHUNK or another Chunked element? */
- uint16 chk_ref; /* reference number of this chunk */
- }CHUNK_REC, * CHUNK_REC_PTR;
-
- /* information on this special chunk data elt */
- typedef struct chunkinfo_t
- {
- intn attached; /* how many access records refer to this elt */
- int32 aid; /* Access id of chunk table i.e. Vdata */
-
- /* chunked element format header fields */
- int32 sp_tag_header_len; /* length of the special element header */
- uint8 version; /* Version of this Chunked element */
- int32 flag; /* flag for multiply specialness ...*/
- int32 length; /* the actual length of the data elt */
- int32 chunk_size; /* the logical size of the chunks */
- int32 nt_size; /* number type size i.e. size of data type */
- uint16 chktbl_tag; /* DFTAG_VH - Vdata header */
- uint16 chktbl_ref; /* ref of the first chunk table structure(VDATA) */
- uint16 sp_tag; /* For future use.. */
- uint16 sp_ref; /* For future use.. */
- int32 ndims; /* number of dimensions of chunk */
- DIM_REC *ddims; /* array of dimension records */
- int32 fill_val_len; /* fill value number of bytes */
- VOID *fill_val; /* fill value */
- /* For each specialness, only one for now SPECIAL_COMP */
- int32 comp_sp_tag_head_len; /* Compression header length */
- VOID *comp_sp_tag_header; /* compression header */
-
- /* For Compression info */
- comp_coder_t comp_type; /* Compression type */
- comp_model_t model_type; /* Compression model type */
- comp_info *cinfo; /* Compression info struct */
- model_info *minfo; /* Compression model info struct */
-
- /* additional memory resident data structures to be used */
- int32 *seek_chunk_indices; /* chunk array indicies relative
- to the other chunks */
- int32 *seek_pos_chunk; /* postion within the current chunk */
- int32 *seek_user_indices; /* user postion within the element */
- TBBT_TREE *chk_tree; /* TBBT tree of all accessed table entries
- i.e. CHUNK_REC's read/written/modified */
- MCACHE *chk_cache; /* chunk cache */
- int32 num_recs; /* number of Table(Vdata) records */
- }
- chunkinfo_t;
- #endif /* _HCHUNKS_MAIN_ */
-
- #if defined c_plusplus || defined __cplusplus
- extern "C"
- {
- #endif /* c_plusplus || __cplusplus */
-
- /*
- ** from hchunks.c
- */
-
- /* User Public */
- extern int32 HMCcreate
- (int32 file_id, /* IN: file to put linked chunk element in */
- uint16 tag, /* IN: tag of element */
- uint16 ref, /* IN: ref of element */
- uint8 nlevels, /* IN: number of levels of chunks */
- int32 fill_val_len, /* IN: fill value length in bytes */
- VOID *fill_val, /* IN: fill value */
- HCHUNK_DEF *chk_array /* IN: structure describing chunk distribution
- can be an array? but we only handle 1 level */);
-
- extern int32 HMCsetMaxcache
- (int32 access_id, /* IN: access aid to mess with */
- int32 maxcache, /* IN: max number of pages to cache */
- int32 flags /* IN: flags = 0, HMC_PAGEALL */);
-
- extern int32 HMCwriteChunk
- (int32 access_id, /* IN: access aid to mess with */
- int32 *origin, /* IN: origin of chunk to write */
- const VOID *datap /* IN: buffer for data */);
-
- extern int32 HMCreadChunk
- (int32 access_id, /* IN: access aid to mess with */
- int32 *origin, /* IN: origin of chunk to read */
- VOID *datap /* IN: buffer for data */);
-
- extern int32 HMCPcloseAID
- (accrec_t *access_rec /* IN: access record of file to close */);
-
- /* Library Private */
- #ifdef _HCHUNKS_MAIN_
- /* tbbt.h helper routines */
- intn chkcompare(void * k1, /* IN: first key */
- void * k2, /* IN: second key */
- intn cmparg /* IN: not sure? */);
- void chkfreekey(void * key /*IN: chunk key */ );
- void chkdestroynode(void * n /* IN: chunk record */ );
-
- /* Private to 'hchunks.c' */
- extern int32 HMCPstread
- (accrec_t *access_rec /* IN: access record to fill in */);
-
- extern int32 HMCPstwrite
- (accrec_t *access_rec /* IN: access record to fill in */);
-
- extern int32 HMCPseek
- (accrec_t *access_rec, /* IN: access record to mess with */
- int32 offset, /* IN: seek offset */
- int origin /* IN: where we should calc the offset from */);
-
- extern int32 HMCPchunkread
- (VOID *cookie, /* IN: access record to mess with */
- int32 chunk_num, /* IN: chunk to read */
- VOID *datap /* OUT: buffer for data */);
-
- extern int32 HMCPread
- (accrec_t * access_rec, /* IN: access record to mess with */
- int32 length, /* IN: number of bytes to read */
- void * data /* OUT: buffer for data */);
-
- extern int32 HMCPchunkwrite
- (VOID *cookie, /* IN: access record to mess with */
- int32 chunk_num, /* IN: chunk number */
- const VOID *datap /* IN: buffer for data */);
-
- extern int32 HMCPwrite
- (accrec_t *access_rec, /* IN: access record to mess with */
- int32 length, /* IN: number of bytes to write */
- const void * data /* IN: buffer for data */);
-
- extern intn HMCPendaccess
- (accrec_t *access_rec /* IN: access record to close */);
-
- extern int32 HMCPinfo
- (accrec_t *access_rec, /* IN: access record of access elemement */
- sp_info_block_t *info_chunk /* OUT: information about the special element */);
-
- extern int32 HMCPinquire
- (accrec_t * access_rec, /* IN: access record to return info about */
- int32 *pfile_id, /* OUT: file ID; */
- uint16 *ptag, /* OUT: tag of info record; */
- uint16 *pref, /* OUT: ref of info record; */
- int32 *plength, /* OUT: length of element; */
- int32 *poffset, /* OUT: offset of element -- meaningless */
- int32 *pposn, /* OUT: current position in element; */
- int16 *paccess, /* OUT: access mode; */
- int16 *pspecial /* OUT: special code; */);
-
- #endif /* _HCHUNKS_MAIN_ */
-
- #if defined c_plusplus || defined __cplusplus
- }
- #endif /* c_plusplus || __cplusplus */
-
- #ifndef _HCHUNKS_MAIN_
- /* not in master file hchunk.c */
- extern funclist_t chunked_funcs; /* functions to perform chunking */
-
- #else /* in hchunks.c */
-
- /* the accessing special function table for chunks */
- funclist_t chunked_funcs =
- {
- HMCPstread,
- HMCPstwrite,
- HMCPseek,
- HMCPinquire,
- HMCPread,
- HMCPwrite,
- HMCPendaccess,
- HMCPinfo,
- NULL /* no routine registerd */
- };
-
- #endif
-
- #endif /* __HCHUNKS_H */
-